package com.bml.architect.netty.serialiable.codec;

import com.bml.architect.entity.MsgProto;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

public class MsgProtoDecoder extends ByteToMessageDecoder {

    int length = 0;

    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {


        System.out.println(in);

        //所以可读取的长度必须大于等于4，如果小于4，则说明可能是一个连接事件，没有数据可以读
        if (in.readableBytes() >= 4) {
            if (length == 0) {
                length = in.readInt();
            }

            if (in.readableBytes() < length) {
                System.out.println("数据读取不够，等待数据的读取...");
            }

            if (in.readableBytes() >= length) {
                byte[] data = new byte[length];
                //可读的长度必须要大于真实的数据长度才是符合要求
                in.readBytes(data);
                MsgProto msg = new MsgProto();
                msg.setLength(length);
                msg.setContent(data);
                out.add(msg);//传入下一个handler
            }
        }
        length = 0;


    }
}
